package com.shujia.day18;

import com.mysql.jdbc.Driver;

import java.sql.*;

public class Demo02MysqlCon {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {



        /*
            TODO 1.加载驱动
                Driver类中提供的代码 =>
                static {
                    try {
                        java.sql.DriverManager.registerDriver(new Driver());
                    } catch (SQLException E) {
                        throw new RuntimeException("Can't register driver!");
                    }
                }
                静态代码块 => 当前类被加载的时候就被执行了 => 类加载时，已经给 registerDriver 提供了一个驱动类
                可以在类加载时，就执行static => 反射的方式

         */

        // 不用重复创建
//        DriverManager.registerDriver(new Driver());
        Class.forName("com.mysql.jdbc.Driver");


        /*
            TODO 2.创建连接 -> 通过给定一些URL 用户名 密码 获取数据库连接对象
                由于连接信息在当前代码中已经写死，如果想要实现一次编译可以连接不同数据库，
                  方式1：
                        那么要求连接信息可以被配置 => 可以放入配置文件中
                        可以通过修改当前jar包中的配置文件
                  方式2：
                        可以使用参数传递
                            1.传入具体的信息 url user...
                            2.传入配置文件的路径

           TODO   在实际开发过程中，是如何操作的？
                 一般代码编写完成后，需要以Jar包的形式提供给自己/其他人使用 通过java
                        命令执行jar包中已经编译后的主类
                1.project structure -> artifact -> add+ -> jar -> from module whit dependency
                2.选择要执行的主main类
                注意:
                    1.如果要查看代码 => jd_gui工具
                    2.jar包中的代码不可以修改，但是配置文件可以修改

           TODO  Jar包中的代码如何被执行
                1.执行的类中必须要有main方法
                2.在创建jar时如果已经给定了 主main类
                    可以直接使用 java -jar jar包名称
                3.如果没有指定，比如想执行Demo01MysqlCon
                    可以使用  java -cp jar包名称 类路径
                        java -cp java.jar com.shujia.day18.Demo01MysqlCon
                4.如果在执行代码时要进行传参
                        java -cp jar包名称 类路径 参数1 参数2
                        注意参数之间使用空格隔开

         */


        Connection connection = DriverManager.getConnection("jdbc:mysql://master:3306/bigdata_30?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai", "root", "123456");
//        DriverManager.get


        // TODO 3.获取操作对象  -> 通过操作对象，可以执行SQL等操作
        Statement statement = connection.createStatement();

        // TODO 4.编写SQL并执行
        String sql = "select * from students";
        ResultSet resultSet = statement.executeQuery(sql);

        // TODO 5.如果当SQL有返回结果，那么需要对结果进行遍历
        while (resultSet.next()){

            String id = resultSet.getString("id");
            String name = resultSet.getString("name");
            int age = resultSet.getInt("age");
            String gender = resultSet.getString("gender");
            String clazz = resultSet.getString("clazz");
            System.out.println(id+"\t"+name+"\t"+age+"\t"+gender+"\t"+clazz);
        }

        // TODO 6.对操作对象以及连接进行关闭操作
        statement.close();
        connection.close();


    }
}
